home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / encorsrc.lha / encore_sources / sys / random.t < prev    next >
Text File  |  1988-05-02  |  970b  |  34 lines

  1. (herald random
  2.   (env tsys))
  3.  
  4. ;;; (MAKE-RANDOM <seed>) takes a fixnum seed and returns a procedure of no
  5. ;;; arguments that returns a new pseudo-random number each time it is called.
  6.  
  7. (define (make-random seed)
  8.   (receive (vec a b)
  9.            (make-random-vector seed)
  10.     (object (lambda ()
  11.               (set a (randomize a 314159265 271828189))
  12.               (set b (randomize b 271828189 314159265))
  13.               (receive (index #f)
  14.                        (%digit-multiply a 64)
  15.                 (swap (vref vec index) b)))
  16.       ((print self stream)
  17.        (format stream "#{Random (~a) ~D}" (object-hash self) seed)))))
  18.  
  19. (define-constant (randomize x mult ad)
  20.   (receive (#f low)
  21.            (%digit-multiply x mult)
  22.     (fx+ low ad)))
  23.  
  24. (define (make-random-vector seed)
  25.   (let ((vec (make-vector 64)))
  26.     (do ((i 0 (fx+ i 1))
  27.          (b seed (randomize b 271828189 314159265)))
  28.         ((fx>= i 64)
  29.          (return vec seed b))
  30.       (set (vref vec i) b))))
  31.  
  32.  
  33.  
  34.